import request from '@/utils/request'

/**
 * CRM订单附件管理API
 * 对应后端接口：
 * - api/crmorderattachment/(?P<pk>\d+)?
 * - api/crmorderattachment/folders/
 * - api/crmorderattachment/move_folder/
 */

/**
 * 获取订单附件列表或单个附件详情
 * @param {Object} params 查询参数
 * @param {number} params.id 附件ID（可选，获取单个附件时使用）
 * @param {string} params.kw 关键词搜索（可选）
 * @param {number} params.page 页码（默认1）
 * @param {number} params.pagesize 每页大小（默认100）
 * @param {string} params.order_by 排序字段（默认create_at）
 * @param {number} params.order_desc 是否降序（1=是，0=否，默认1）
 * @param {number} params.order_id 订单ID（可选）
 * @param {string} params.order_no 订单编号（可选）
 * @param {string} params.folder_tag 文件夹标签（可选）
 * @param {boolean} params.organize_by_folder 是否按文件夹组织（默认true）
 * @returns {Promise}
 */
export function getOrderAttachments(params = {}) {
  const { id, ...queryParams } = params
  const url = id ? `/crm/api/crmorderattachment/${id}` : '/crm/api/crmorderattachment/'

  return request({
    url,
    method: 'get',
    params: queryParams
  })
}

/**
 * 创建订单附件
 * @param {Object} data 附件数据
 * @param {number} data.order_id 订单ID（可选）
 * @param {string} data.order_no 订单编号（可选）
 * @param {string} data.filename 文件名
 * @param {string} data.file_url 文件URL
 * @param {string} data.description 描述（可选）
 * @param {string} data.folder_tag 文件夹标签（可选，默认'默认'）
 * @param {Array} data.crmfiles 关联的CRM文件ID列表（可选）
 * @returns {Promise}
 */
export function createOrderAttachment(data) {
  return request({
    url: '/crm/api/crmorderattachment/',
    method: 'post',
    data
  })
}

/**
 * 更新订单附件
 * @param {number} id 附件ID
 * @param {Object} data 更新的数据
 * @param {number} data.order_id 订单ID（可选）
 * @param {string} data.order_no 订单编号（可选）
 * @param {string} data.filename 文件名（可选）
 * @param {string} data.file_url 文件URL（可选）
 * @param {string} data.description 描述（可选）
 * @param {string} data.folder_tag 文件夹标签（可选）
 * @param {Array} data.crmfiles 关联的CRM文件ID列表（可选）
 * @returns {Promise}
 */
export function updateOrderAttachment(id, data) {
  return request({
    url: `/crm/api/crmorderattachment/${id}`,
    method: 'put',
    data
  })
}

/**
 * 删除订单附件
 * @param {number} id 附件ID
 * @returns {Promise}
 */
export function deleteOrderAttachment(id) {
  return request({
    url: `/crm/api/crmorderattachment/${id}`,
    method: 'delete'
  })
}

/**
 * 获取订单附件的文件夹列表
 * @param {Object} params 查询参数
 * @param {number} params.order_id 订单ID（可选）
 * @param {string} params.order_no 订单编号（可选）
 * @returns {Promise} 返回文件夹列表，每个文件夹包含name和count字段
 */
export function getOrderAttachmentFolders(params = {}) {
  return request({
    url: '/crm/api/crmorderattachment/folders/',
    method: 'get',
    params
  })
}

/**
 * 批量移动附件到指定文件夹
 * @param {Object} data 移动数据
 * @param {Array<number>} data.attachment_ids 附件ID列表
 * @param {string} data.target_folder 目标文件夹名称（默认'默认'）
 * @returns {Promise}
 */
export function moveAttachmentsToFolder(data) {
  return request({
    url: '/crm/api/crmorderattachment/move_folder/',
    method: 'post',
    data
  })
}

/**
 * 按文件夹获取附件列表（便捷方法）
 * @param {Object} params 查询参数
 * @param {number} params.order_id 订单ID（可选）
 * @param {string} params.order_no 订单编号（可选）
 * @param {string} params.folder_tag 文件夹标签（可选）
 * @returns {Promise}
 */
export function getAttachmentsByFolder(params = {}) {
  return getOrderAttachments({
    ...params,
    organize_by_folder: true
  })
}

/**
 * 获取默认文件夹的附件
 * @param {Object} params 查询参数
 * @param {number} params.order_id 订单ID（可选）
 * @param {string} params.order_no 订单编号（可选）
 * @returns {Promise}
 */
export function getDefaultFolderAttachments(params = {}) {
  return getOrderAttachments({
    ...params,
    folder_tag: '默认',
    organize_by_folder: false
  })
}

/**
 * 搜索附件
 * @param {Object} params 搜索参数
 * @param {string} params.kw 关键词
 * @param {number} params.order_id 订单ID（可选）
 * @param {string} params.order_no 订单编号（可选）
 * @param {string} params.folder_tag 文件夹标签（可选）
 * @param {number} params.page 页码（可选）
 * @param {number} params.pagesize 每页大小（可选）
 * @returns {Promise}
 */
export function searchOrderAttachments(params) {
  return getOrderAttachments({
    organize_by_folder: false,
    ...params
  })
}
